/********************************************************************************
 *      Copyright:  (C) 2025 YANG Studio
 *                  All rights reserved.
 *
 *       Filename:  dht11.h
 *    Description:  This file 
 *
 *        Version:  1.0.0(27/05/25)
 *         Author:  YANG JIAYU <yangjiayu@gmail.com>
 *      ChangeLog:  1, Release initial version on "27/05/25 19:15:49"
 *                 
 ********************************************************************************/
#ifndef __DHT11_H            // 预编译保护宏，防止头文件重复包含
#define __DHT11_H 

#include "./SYSTEM/sys/sys.h"  // 包含系统基础头文件（提供时钟使能等基础功能）


/******************************************************************************************/
/* DHT11 引脚定义（根据硬件设计修改） */

#define DHT11_DQ_GPIO_PORT                  GPIOG              // DHT11数据引脚所在GPIO端口（GPIOG）
#define DHT11_DQ_GPIO_PIN                   GPIO_PIN_11        // DHT11数据引脚具体编号（PG11）
#define DHT11_DQ_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOG_CLK_ENABLE(); }while(0)   /* 使能GPIOG时钟（do-while结构确保宏可在语句中使用） */

/******************************************************************************************/

/* IO操作函数宏定义（封装底层GPIO操作） */
#define DHT11_DQ_OUT(x)     do{ x ? \
                                HAL_GPIO_WritePin(DHT11_DQ_GPIO_PORT, DHT11_DQ_GPIO_PIN, GPIO_PIN_SET) : \
                                HAL_GPIO_WritePin(DHT11_DQ_GPIO_PORT, DHT11_DQ_GPIO_PIN, GPIO_PIN_RESET); \
                            }while(0)                                                /* 数据引脚输出控制（x=1时输出高电平，x=0时输出低电平） */
#define DHT11_DQ_IN         HAL_GPIO_ReadPin(DHT11_DQ_GPIO_PORT, DHT11_DQ_GPIO_PIN)  /* 数据引脚输入读取（返回引脚当前电平状态） */


uint8_t dht11_init(void);   /* 初始化DHT11传感器（配置IO口并检测传感器存在性） */
uint8_t dht11_check(void);  /* 检查DHT11是否响应（返回0表示响应正常，1表示无响应） */
uint8_t dht11_read_data(uint8_t *temp, uint8_t *humi);   /* 读取温湿度数据（通过指针返回温度和湿度，返回0表示读取成功） */

#endif  /* __DHT11_H */  // 预编译保护宏结束

